package ar.edu.ufasta.presupuestos.servicios.reportes;


/**
 * Manejo de query a utilizar en los reportes
 * 
 * @author Juan Pablo Ruiz, Carlos Daniel Gaspar
 *
 */
public class SQLReportQuery {


	/**
	 * Obtiene la query de ranking de artiulos
	 * @return quey de ranking de articulos
	 */
	public String getRankingArticulosQuery(){
		String query = "";
		query+="SELECT a.id, a.nombre, ";
		query+="COUNT(*) as presupuestos, SUM(d.cantidad) as cantidad,SUM(d.cantidad*a.precio_unitario) as valor ";
		query+="FROM presupuestos p JOIN detalle_presupuestos d ON (p.id = d.id_presupuesto) ";
		query+="JOIN articulos a ON (a.id=d.id_producto) ";
		query+="GROUP BY a.id ";
		query+="ORDER BY cantidad DESC,a.id ASC;";
		return query;
	}

	/**
	 * Obtiene la query de ranking de clientes
	 * @return quey de ranking de clientes
	 */
	public String getRankingClientesQuery(){
		String query = "";
		query+="SELECT c.id, CONCAT(CONCAT(c.apellido,\", \"),c.nombre) as nombre, ";
		query+="COUNT(*) as cantidad_presupuestos, ";
		query+="(SELECT sum(d.cantidad) FROM detalle_presupuestos d where d.id_presupuesto = p.id) as cantidad_articulos, ";
		query+="(SELECT sum(d.cantidad*a.precio_unitario) FROM detalle_presupuestos d join articulos a on (a.id = d.id_producto) where d.id_presupuesto = p.id) as total ";
		query+="FROM presupuestos p ";
		query+="JOIN clientes c ON (c.id=p.id_cliente) ";
		query+="GROUP By c.id ORDER BY total DESC, nombre ASC;";			
		return query;
	}
	
	/**
	 * Obtiene la query de detalle de clientes
	 * @return query de detalle de cliented
	 */
	public String getDetalleClienteQuery(){
		String query = "";
		query += "SELECT c.nombre, c.apellido, c.celular, c.telefono, c.direccion, c.email, ";
		query += "IFNULL((SELECT count(psub.id) AS 'Conformados' FROM presupuestos psub WHERE psub.ID_cliente=c.id AND psub.ID_estado=1 GROUP BY psub.ID_estado ),0) AS 'pr_conformados',";
		query += "IFNULL((SELECT count(psub.id) AS 'Aprobados' FROM presupuestos psub WHERE psub.ID_cliente=c.id AND psub.ID_estado=2 GROUP BY psub.ID_estado ),0) AS 'pr_aprobados',";
		query += "IFNULL((SELECT count(psub.id) AS 'Desaprobados' FROM presupuestos psub WHERE psub.ID_cliente=c.id AND psub.ID_estado=3 GROUP BY psub.ID_estado ),0) AS 'pr_desaprobados',";
		query += "IFNULL((SELECT count(psub.id) AS 'EnProceso' FROM presupuestos psub WHERE psub.ID_cliente=c.id AND psub.ID_estado=4 GROUP BY psub.ID_estado ),0) AS 'pr_enproceso',";
		query += "IFNULL((SELECT count(psub.id) AS 'Finalizados' FROM presupuestos psub WHERE psub.ID_cliente=c.id AND psub.ID_estado=5 GROUP BY psub.ID_estado ),0) AS 'pr_terminados' ";
		query += "FROM clientes c;"; 
		return query;
	}
	
	/**
	 * Obtiene la query de analisis costo/beneficio
	 * @return query de analisis costo/beneficio
	 */
	public String getAnalisisCBQuery(){
		String query = "";
		query += "SELECT a.id, a.nombre, IFNULL(SUM(dp.cantidad),0) AS cantidad, "; 
		query += "IFNULL(SUM(dp.cantidad),0) AS cantidad, ";
		query += "IFNULL((IFNULL(SUM(dp.cantidad),0) * a.precio_unitario),0) AS costo_venta, ";
		query += "IFNULL((IFNULL(SUM(dp.cantidad),0) * a.precio),0) AS costo_compra, ";
		query += "IFNULL(((IFNULL(SUM(dp.cantidad),0) * a.precio_unitario)  - (IFNULL(SUM(dp.cantidad),0) * a.precio)),0) AS beneficio ";
		query += "FROM presupuestos p JOIN detalle_presupuestos dp ON p.id=dp.ID_presupuesto RIGHT JOIN articulos a ON dp.ID_producto=a.id ";
		query += "WHERE p.ID_estado=4 GROUP BY a.id;";
		return query;
	}
	
}
